// webpack 使用 闭包+defineProperty模拟实现了  esModule
(() => { // webpackBootstrap
  "use strict";
  var modules = {

    "./src/main.js": (webpackModule, exports, require) => {
      // webpackModule ：{exports:{}}
      // exports : {}
      // require.r(exports);

      var obj1 = require("./src/util/util.js");
      console.log(obj1)
      console.log(obj1.sum)
      var obj2 = require("./src/util/data.js");
      console.log(obj2.a, obj2.b)
      console.log(obj1.sum(obj2.a, obj2.b))
      console.log(obj1.minus(obj2.a, obj2.b))


    },

    "./src/util/data.js": (webpackModule, exports, require) => {
      let a = 100;
      const b = 200;
      require.r(exports);
      require.d(exports, {
        "a": () => (a),
        "b": () => (b)
      });


    },

    "./src/util/util.js": (webpackModule, exports, require) => {

      require.r(exports);
      require.d(exports, {
        "sum": () => (sum),
        "minus": () => (minus)
      });
      function sum(a, b) {
        return a + b
      }
      function minus(a, b) {
        return a - b
      }

    }

  };
  /************************************************************************/
  // The module cache
  // var __webpack_module_cache__ = {};

  // The require function
  // require("./src/main.js"); 第一次执行
  // var obj1 = require("./src/util/util.js"); 第二次执行
  function require(moduleId) { // "./src/main.js"  "./src/util/util.js"
    // Check if module is in cache
    // var cachedModule = __webpack_module_cache__[moduleId];
    // if (cachedModule !== undefined) {
    //   return cachedModule.exports;
    // }
    // Create a new module (and put it into the cache)
    // __webpack_module_cache__[moduleId]
    var module = {
      exports: {}
    };

    // Execute the module function
    modules[moduleId](module, module.exports, require);

    // Return the exports of the module
    return module.exports;
  }

  /************************************************************************/
  /* webpack/runtime/define property getters */
  (() => {
    // define getter functions for harmony exports
    require.d = (exports, definition) => {
      // exports : {} ;
      /* 
        definition:{
        "sum": () => (sum),
        "minus": () => (minus)
      }
      */
      for (var key in definition) {
        //  判断 循环definition的时候 看看是不不是滴油属性 并且 exports上没有这个属性
        if (require.o(definition, key) && !require.o(exports, key)) {
          // Object.defineProperty（target,key,options）
          //  要给target对象新增一个可以属性对应的配置 在options
          // enumerable 是否可枚举
          exports[key] = definition[key]()
          // Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
        }
      }
    };
  })();

  /* webpack/runtime/hasOwnProperty shorthand */
  (() => {
    // o函数就是判断传进来的属性是都是当前这个对象的私有属性
    require.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
  })();

  /* webpack/runtime/make namespace object */
  (() => {
    // define __esModule on exports
    //  r函数就是把传进来的普通对象 变成一个esmodule对象
    require.r = (exports) => {
      if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
        Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
      }
      Object.defineProperty(exports, '__esModule', { value: true });
    };
  })();

  /************************************************************************/

  // startup
  // Load entry module and return exports
  // This entry module can't be inlined because the eval devtool is used.
  var exports = require("./src/main.js");

})()